<?php
class Notify
{
	static private $_id = null;
	static private $_mail = array();
	static private $_countMail = array();

	const SENDER_EMAIL = 'pla2dc@gmail.com';
	const SENDER_PASSWORD = 'pla20357';
	
	const EMAIL_MARKETING = 'papangping@gmail.com';
	const EMAIL_ACCOUNTING = 'papangping@gmail.com';
	const EMAIL_TECHNIC = 'papangping@gmail.com';
	
	private function __construct(){}
	
	static private function __addNotify($type)
	{
		$db = Db::getInstance();
		$sql = sprintf("INSERT INTO Notify(type) VALUES('%s')",
				$db->real_escape_string($type));
		if($db->query($sql)){
			self::$_id = $db->insert_id;
			return true;
		}
		return false;
	}
	
	static public function addInvoice($invoiceId)
	{
		$db = Db::getInstance();
		try {
			if(!self::__addNotify('invoice')){
				throw new Exception($db->error);
			}
			$id = self::$_id;
			$sql = sprintf("INSERT INTO NotifyInvoice(id,invoiceId) VALUES('%s','%s')",
					$id,
					$db->real_escape_string($invoiceId));
			if(!$db->query($sql)){
				throw new Exception($db->error);
			}
			
			//if invoice is Colo mail to accounting
			$invoice = Invoice::getInvoiceById($invoiceId);
			if($invoice['type'] == 'colo'){
				self::mailInvoiceColo($invoiceId);
			}
			return true;
		}
		catch (Exception $ex){
			Log::error($ex->getMessage());
			return false;
		}
	}
	
	static public function addPayment($paymentId)
	{
		$db = Db::getInstance();
		try {
			if(!self::__addNotify('payment')){
				throw new Exception($db->error);
			}
			$id = self::$_id;
			$sql = sprintf("INSERT INTO NotifyPayment(id,paymentId) VALUES('%s','%s')",
					$id,
					$db->real_escape_string($paymentId));
			if(!$db->query($sql)){
				throw new Exception($db->error);
			}
			self::mailPayment($paymentId);
			return true;
		}
		catch (Exception $ex){
			Log::error($ex->getMessage());
			return false;
		}
	}
	
	static private function mailInvoiceColo($id)
	{
		$db = Db::getInstance();
		try{
			$invoice = Invoice::getInvoiceById($id);
			$account = Account::get($invoice['accountId']);
			$string = <<<HTML
			มีผู้สั่งแพคเกจ Colo<br />
			ราคา {$invoice['price']} บาท<br />
			ระยะเวลาที่จะซื้อบริการ {$invoice['month']} เดือน<br />
			email {$account['email']}<br />
			เบอร์โทรศัพท์ {$account['phone']}<br />
			<a href="old.php?page=invoice&id={$invoice['id']}">ดู invoice</a>
HTML;
			if(!self::mail(self::EMAIL_MARKETING, 'P2DC Alert', $string)){
				throw new Exception('Send email invoice colo failed');
			}
		}catch(Exception $ex){
			throw $ex;
		}
	}
	
	static private function mailPayment($id)
	{
		$db = Db::getInstance();
		try{
			$payment = Payment::getPaymentById($id);
			if($payment['confirmType'] == Payment::CONFIRM_FORM){
				$string = <<<HTML
						id: {$payment['id']}<br />
						payDate: {$payment['payDate']}<br />
						payTime: {$payment['payTime']}<br />
						payBank: {$payment['payBank']}<br />
						payMoney: {$payment['money']}<br />
						-----------------------------------------------<br />
HTML;
			}
			else{
				$string = <<<HTML
						id: {$payment['id']}<br />
						<img src="http://p2dc.com/slips/{$payment['slipPath']}" /><br />
						-------------------------------------------------<br />
HTML;
			}
			$priceAll = 0;
			foreach ($payment['invoices'] as $key => $invoice){
				if(Invoice::ISNEW_YES == $invoice['isNew']){
					$payType = 'สมัครใช้บริการใหม่';
					$textDay = $invoice['startDay'].' วัน';
				}
				else{
					$payType = 'ต่ออายุบริการ';
					$textDay = '';
				}
				
				$string .= <<<HTML
					แจ้งชำระสำหรับการ {$payType}
					แพคเกจ VPS<br />
					ราคา {$invoice['price']} บาท<br />
					ระยะเวลาที่จะซื้อบริการ {$invoice['month']} เดือน {$textDay}<br />
					<a href="http://p2dc.com/old.php?page=invoice&id={$invoice['id']}">ดู invoice</a>
					ตรวจสอบการชำระเงินเสร็จแล้ว แจ้งฝ่ายเทคนิค <a href="http://p2dc.com/old.php?page=system.mailTechnic&invoiceId={$invoice['id']}">คลิก</a><br />
					<!-- Active <a href="#">คลิก</a><br /> -->
					---------------------------------------
HTML;
				$priceAll += $invoice['price'];
			}
			self::mail(self::EMAIL_ACCOUNTING, 'P2DC Alert', $string);
		}catch(Exception $ex){
			throw $ex;
		}
	}
	
	static public function mailPaidPayment($mail, $bank, $date, $time, $money)
	{
		$body = <<<BODY
<p>P2DC ได้ตรวจสอบและยืนยันการชำระเงินของท่านแล้ว</p>
<table cellspacing="0" cellpadding="10" border="1">
	<thead bgcolor="blue" style="color: white;  background-color: blue;">
		<tr>
			<th>ธนาคาร</th>
			<th>วันที่โอน</th>
			<th>เวลาที่โอน</th>
			<th>จำนวนเงิน</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>{$bank}</td>
			<td>{$date}</td>
			<td>{$time}</td>
			<td>{$money} บาท</td>
		</tr>
	</tbody>
</table>				
<p>สำหรับการสั่งซื้อสินค้าใหม่ ขอขอบคุณที่เลือกใช้บริการของเรา กรุณารอการติดต่อกลับจากเจ้าหน้าที่ภายใน 24 ชั่วโมง เพื่อแจ้งรายละเอียดและวิธีการเข้าใช้บริการของท่าน</p>
		
<p>หากต้องการแจ้งปัญหารการใช้งานหรือสอบถามเพิ่มเติม กรุณาติดต่อ</p>

<p>
facebook fanpage : <a href="http://facebook.com/pla2dc">facebook.com/pla2dc</a><br />
skype ID : pla2dc<br />
อีเมล์ : pla2dc@gmail.com<br />
โทรศัพท์ : 087-787-6960<br />
</p>

<p>เวลาทำการ : จันทร์ – เสาร์ เวลา 10.00 - 17.00 น.</p>

<p>
ขอแสดงความนับถือ<br />
Pla2 Data Center Chiang mai<br />
บริษัท ปลาทูฟิวชั่น จำกัด<br />
</p>
BODY;
		self::mail($mail, 'ได้ตรวจสอบและยืนยันการชำระเงินของท่านแล้ว', $body);
	}
	
static public function mailMissPayment($mail, $bank, $date, $time, $money)
	{
		$body = <<<BODY
<p>P2DC ได้ตรวจสอบการชำระค่าบริการของท่านแล้วไม่พบการแจ้งชำระตามรายละเอียดที่แจ้ง
กรุณาตรวจสอบวันเวลาและจำนวนเงินที่ชำระว่าตรงกับการชำระค่าบริการหรือไม่</p>
<p>
รายละเอียดการแจ้งชำระ
</p>
<table cellspacing="0" cellpadding="10" border="1">
	<thead bgcolor="blue" style="color: white; background-color: blue;">
		<tr>
			<th>ธนาคาร</th>
			<th>วันที่โอน</th>
			<th>เวลาที่โอน</th>
			<th>จำนวนเงิน</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>{$bank}</td>
			<td>{$date}</td>
			<td>{$time}</td>
			<td>{$money} บาท</td>
		</tr>
	</tbody>
</table>
<p>ติดต่อเจ้าหน้าที่</p>

<p>
facebook fanpage : <a href="http://facebook.com/pla2dc">facebook.com/pla2dc</a><br />
skype ID : pla2dc<br />
อีเมล์ : pla2dc@gmail.com<br />
โทรศัพท์ : 087-787-6960<br />
</p>
		
<p>เวลาทำการ : จันทร์ – เสาร์ เวลา 10.00 - 17.00 น.</p>
		
<p>
ขอแสดงความนับถือ<br />
Pla2 Data Center Chiang mai<br />
บริษัท ปลาทูฟิวชั่น จำกัด<br />
</p>
BODY;
		self::mail($mail, 'ไม่พบการชำระค่าบริการ', $body);
	}
	
	static public function mailNotFullyPayment($mail, $invoices, $payTrue, $moneyMiss, $info = '')
	{
		$invoicesBody = '';
		$priceAll = 0;
		foreach ($invoices as $key => $value){
			$priceAll += $value['price'];
			$invoicesBody .= <<<BODY
		<tr>
			<td>{$value['id']}</td>
			<td>{$value['package']['type']}<br />{$value['package']['name']}</td>
			<td>{$value['month']} เดือน</td>
			<td>{$value['price']} บาท</td>
		</tr>
BODY;
		}
		
		$body = <<<BODY
<p>P2DC ได้ตรวจสอบการชำระค่าบริการของท่านแล้ว<br />
ไม่พบการชำระค่าบริการตามที่แจ้งชำระ อาจเกิดจากข้อมูลการชำระผิดพลาด กรุณาตรวจสอบหลักฐานการชำระเงินของท่าน หรือแจ้งชำระใหม่</p>
<table cellspacing="0" cellpadding="10" border="1">
	<thead bgcolor="blue" style="color: white; background-color: blue;">
		<tr>
			<th>ยอดชำระ</th>
			<th>ยอดชำระที่ยืนยันแล้ว</th>
			<th>ยอดชำระที่ขาด</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>{$priceAll} บาท</td>
			<td>{$payTrue} บาท</td>
			<td>{$moneyMiss} บาท</td>
		</tr>
	</tbody>
</table>
					
<p>รายการสั่งซื้อ</p>
<table cellspacing="0" cellpadding="10" border="1">
	<thead bgcolor="blue" style="color: white;  background-color: blue;">
		<tr>
			<th>invoice id</th>
			<th>บริการ</th>
			<th>ระยะเวลา</th>
			<th>จำนวนเงิน</th>
		</tr>
	</thead>
	<tbody>
		{$invoicesBody}
	</tbody>
</table>

{$info}

<p>ติดต่อเจ้าหน้าที่</p>
	
<p>
facebook fanpage : <a href="http://facebook.com/pla2dc">facebook.com/pla2dc</a><br />
skype ID : pla2dc<br />
อีเมล์ : pla2dc@gmail.com<br />
โทรศัพท์ : 087-787-6960<br />
</p>
	
<p>เวลาทำการ : จันทร์ – เสาร์ เวลา 10.00 - 17.00 น.</p>
	
<p>
ขอแสดงความนับถือ<br />
Pla2 Data Center Chiang mai<br />
บริษัท ปลาทูฟิวชั่น จำกัด<br />
</p>
BODY;
		self::mail($mail, 'การชำระค่าบริการไม่ครบตามยอดชำระ', $body);
	}

    static public function setup($mail, $type, $package, $month, $timeout, $infoHtml = '')
    {
        $body = <<<BODY
<p>P2DC ได้ติดตั้ง/ต่ออายุ package ของท่านเรียบร้อยแล้ว
<br />
ไม่พบการชำระค่าบริการตามที่แจ้งชำระ อาจเกิดจากข้อมูลการชำระผิดพลาด กรุณาตรวจสอบหลักฐานการชำระเงินของท่าน หรือแจ้งชำระใหม่</p>
<table cellspacing="0" cellpadding="10" border="1">
	<thead bgcolor="blue" style="color: white;  background-color: blue;">
		<tr>
			<th>package</th>
			<th>ระยะเวลา</th>
			<th>วันหมดอายุ</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>{$type}<br />{$package}</td>
			<td>{$month} เดือน</td>
			<td>{$timeout}</td>
		</tr>
	</tbody>
</table>
<p>
{$infoHtml}
</p>
<p>ติดต่อเจ้าหน้าที่</p>

<p>
facebook fanpage : <a href="http://facebook.com/pla2dc">facebook.com/pla2dc</a><br />
skype ID : pla2dc<br />
อีเมล์ : pla2dc@gmail.com<br />
โทรศัพท์ : 087-787-6960<br />
</p>

<p>เวลาทำการ : จันทร์ – เสาร์ เวลา 10.00 - 17.00 น.</p>

<p>
ขอแสดงความนับถือ<br />
Pla2 Data Center Chiang mai<br />
บริษัท ปลาทูฟิวชั่น จำกัด<br />
</p>
BODY;
        self::mail($mail, 'ได้ติดตั้ง/ต่ออายุ package ของท่านเรียบร้อยแล้ว', $body);
    }

    static public function invoiceProduct($product, $invoice, $account)
    {

    }

	static public function mail($to, $subject, $message)
	{
		try {
			$mail = new PHPMailer;
			
			$mail->IsSMTP();
			$mail->Host = 'ssl://smtp.gmail.com';
			$mail->Port = 465;
			$mail->SMTPAuth = true;
			$mail->Username = self::SENDER_EMAIL;
			$mail->Password = self::SENDER_PASSWORD;
			$mail->IsHTML(true);
			$mail->From = 'pla2dc@gmail.com';
			$mail->FromName = 'P2DC';
			
			$mail->CharSet = "utf-8";
			$mail->SMTPSecure = '';
			
			$mail->Subject  = $subject;
			$mail->Body     =  $message;
			//$mail->AltBody =  $message;
			$mail->AddAddress($to); // ส่งไปที่ใครดีครับ
			
			self::$_mail[] = $mail;
			self::$_countMail++;
			
			return true;
		}
		catch(Exception $ex){
			Log::error($ex->getMessage());
			return false;
		}
		return true;
	}

    static public function mailService($to, $subject, $message)
    {
        $handle = curl_init();
        $json = urlencode(json_encode(array('to'=>$to, 'subject'=>$subject, 'message'=>$message)));
        $options = array(
            CURLOPT_URL => $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?page=mail.api',
            CURLOPT_CUSTOMREQUEST => 'POST', // GET POST PUT PATCH DELETE HEAD OPTIONS
            CURLOPT_POSTFIELDS => "data={$json}",
            CURLOPT_HEADER => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => array('X-Requested-With: XMLHttpRequest'),
            //CURLOPT_TIMEOUT => 2
        );
        curl_setopt_array($handle, $options);

        // send request and wait for responce
        $responce = json_decode(curl_exec($handle), true);

        return $responce;
    }

	static public function mailDo()
	{
		foreach(self::$_mail as $key => $mail){
			if(!$mail->Send()) {
				Log::error($mail->ErrorInfo);
			}
		}
	}
	
	static public function hasMail()
	{
		return self::$_countMail>0? true: false;
	}
}